package org.dromara.profiles.domain;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.Data;
import org.hibernate.validator.constraints.Length;

import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * 捐赠者体检/医疗信息表
 * 数据库表名：bus_donor_medical
 */
@Data
@TableName("bus_donor_medical")
public class BusDonorMedical implements Serializable {

    @TableField("id")
    @Schema(description = "主键")
    private Long id;

    @TableField("donor_id")
    @NotNull(message = "捐赠者ID不能为空")
    @Schema(description = "捐赠者ID", requiredMode = Schema.RequiredMode.REQUIRED)
    private Long donor_id;

    @TableField("is_anonymous")
    @Schema(description = "是否匿名捐赠")
    private Integer is_anonymous;

    @TableField("has_criminal_history")
    @Schema(description = "是否有犯罪史")
    private Integer has_criminal_history;

    @TableField("is_smoking")
    @Schema(description = "是否吸烟")
    private Integer is_smoking;

    @TableField("is_drinking")
    @Schema(description = "是否饮酒")
    private Integer is_drinking;

    @TableField("is_drug_use")
    @Schema(description = "是否吸毒")
    private Integer is_drug_use;

    @TableField("has_surgery_history")
    @Schema(description = "是否经历过任何手术")
    private Integer has_surgery_history;

    @TableField("has_pregnancy_history")
    @Schema(description = "是否有孕史")
    private Integer has_pregnancy_history;

    @TableField("is_under_treatment")
    @Schema(description = "是否正在接受任何治疗")
    private Integer is_under_treatment;

    @TableField("has_psych_treatment")
    @Schema(description = "是否接受过精神科治疗")
    private Integer has_psych_treatment;

    @TableField("has_plastic_surgery")
    @Schema(description = "是否整容")
    private Integer has_plastic_surgery;

    @TableField("has_genetic_disease")
    @Schema(description = "是否有家族遗传病史")
    private Integer has_genetic_disease;

    @TableField("has_sti")
    @Schema(description = "是否有性疾病")
    private Integer has_sti;

    @TableField("has_allergy")
    @Schema(description = "是否有过敏史")
    private Integer has_allergy;

    @TableField("menarche_age")
    @Schema(description = "初次月经年龄(8-20岁)")
    private Integer menarche_age;

    @TableField("menstrual_days")
    @Schema(description = "月经周期时间(天)")
    private Integer menstrual_days;

    @TableField("cycle_interval")
    @Schema(description = "两次经期间隔时间(天)")
    private Integer cycle_interval;

    @TableField("is_myopia")
    @Schema(description = "是否近视")
    private Integer is_myopia;

    @TableField("has_hearing_issue")
    @Schema(description = "是否有听力问题")
    private Integer has_hearing_issue;

    @TableField("has_dental_issue")
    @Schema(description = "是否有牙齿问题")
    private Integer has_dental_issue;

    @TableField("has_tattoo")
    @Schema(description = "是否有纹身")
    private Integer has_tattoo;

    @TableField("has_piercing")
    @Schema(description = "是否有穿孔")
    private Integer has_piercing;

    @TableField("has_major_illness")
    @Schema(description = "是否有过重大疾病或受伤")
    private Integer has_major_illness;

    @TableField("has_cancer")
    @Schema(description = "是否诊断出患有癌症")
    private Integer has_cancer;

    @TableField("has_birth_defect")
    @Schema(description = "是否有过出生缺陷")
    private Integer has_birth_defect;

    @TableField("is_chronic_disease")
    @Schema(description = "是否有慢性病")
    private Integer is_chronic_disease;

    @TableField("has_anesthesia_complication")
    @Schema(description = "是否有麻醉并发症")
    private Integer has_anesthesia_complication;

    @TableField("has_siblings")
    @Schema(description = "是否有兄弟姐妹")
    private Integer has_siblings;

    @TableField("allow_diff_family")
    @Schema(description = "是否愿意与不同家庭匹配")
    private Integer allow_diff_family;

    @TableField("meet_intended_parents")
    @Schema(description = "是否愿意与准父母见面")
    private Integer meet_intended_parents;

    @TableField("meet_future_child")
    @Schema(description = "是否与未来孩子见面")
    private Integer meet_future_child;

    @TableField("can_complete_all_steps")
    @Schema(description = "是否可以配合完成所有流程")
    private Integer can_complete_all_steps;

    @TableField("donate_start_date")
    @Schema(description = "可开始捐赠日期")
    private LocalDate donate_start_date;

    @TableField("contraceptive_method")
    @Size(max = 100, message = "避孕方式描述长度不能超过100")
    @Length(max = 100, message = "避孕方式描述长度不能超过100")
    @Schema(description = "避孕方式描述")
    private String contraceptive_method;

    @TableField("partners_last_6m")
    @Schema(description = "过去6个月性伴侣数量")
    private Integer partners_last_6m;

    @TableField("last_gyn_date")
    @Schema(description = "最近一次妇科就诊日期")
    private LocalDate last_gyn_date;

    @TableField("last_gyn_note")
    @Size(max = 200, message = "最近一次妇科就诊备注长度不能超过200")
    @Length(max = 200, message = "最近一次妇科就诊备注长度不能超过200")
    @Schema(description = "最近一次妇科就诊备注")
    private String last_gyn_note;

    @TableField("create_time")
    @Schema(description = "创建时间")
    private LocalDateTime create_time;

    @TableField("update_time")
    @Schema(description = "更新时间")
    private LocalDateTime update_time;

    @TableField("del_flag")
    @Schema(description = "删除标志: 0-存在, 1-删除")
    private Integer del_flag;
}
